package cz.vse.adventura.po1715.xburj54_bursa.hra;

import cz.vse.adventura.po1715.xburj54_bursa.hra.APříkaz;
import cz.vse.adventura.po1715.xburj54_bursa.hra.HraLupič;

/*******************************************************************************
 * Instance třídy {@code PříkazOtevři} představuje příkaz používaný
 * k otevření nějakého předmětu. V dané hře je tímto předmětem vždy trezor
 * v pracovně, ale obecně lze hru rozšířit o možnost otevření dalších
 * předmětů v dalších místnostech.
 *
 * @author Jan Bursa
 * @version 1.02,  16.12.2010
 */
public class PříkazOtevři extends APříkaz
{

//== KONSTANTNÍ ATRIBUTY TŘÍDY =================================================
//== PROMĚNNÉ ATRIBUTY TŘÍDY ===================================================

    /** Příznak toho, že hráč otevřel trezor. */
    static boolean TREZOR_OTEVREN = false;

//== KONSTANTNÍ ATRIBUTY INSTANCÍ ==============================================
//== PROMĚNNÉ ATRIBUTY INSTANCÍ ================================================
//== PŘÍSTUPOVÉ METODY VLASTNOSTÍ TŘÍDY ========================================
//== OSTATNÍ NESOUKROMÉ METODY TŘÍDY ===========================================

//##############################################################################
//== KONSTRUKTORY A TOVÁRNÍ METODY =============================================

    /***************************************************************************
     * Vytvoří instanci mající na strosti reakci na příkaz <b>otevři</b>,
     * po jehož zadaní hráč otevře předmět, jehož název bude uveden za příkazem.
     * V daném případě se jedná pouze o trezor.
     */
    public PříkazOtevři()
    {
        super( "Otevři",
               "Otevře zadaný předmět." );
    }

//== ABSTRAKTNÍ METODY =========================================================
//== PŘÍSTUPOVÉ METODY VLASTNOSTÍ INSTANCÍ =====================================
//== OSTATNÍ NESOUKROMÉ METODY INSTANCÍ ========================================

    /***************************************************************************
     * Otevře zadaný předmět; před tím však zkontroluje,
     * zda je zadán otevíraný předmět, zda tímto předmětem je trezor v pracovně
     * a zda je trezor již odemčen, aby šel otevřít.
     *
     * @param parametry Jediným povoleným parametrem je trezor
     * @return Text zpravy vypsane po porovedeni prikazu
     */
    @Override
    public String execute( String... parametry )
    {
        if (parametry.length == 0)  {
            return "Je třeba říct, který předmět se má otevřít.";//==========>
        }
        String predmet = parametry[0];
        HraLupič  hra = HraLupič.getHra() ;
        if (! predmet.equalsIgnoreCase("Trezor")) {
             return "Předmět " + predmet + " není možno otevřít.";//==========>
        }
        if ((!parametry[0].equalsIgnoreCase("Trezor"))  ||
            Místnost.getAktuálníMístnost() != Místnost.Pracovna )
        {
            return "V této místnosti žádný Trezor není";
        }
        if (TREZOR_OTEVREN) {
            return "Trezor je již otevřen";
        }
        if (( ! PříkazPoužij.KAMINEK_VLOZEN ) ||
            ( ! PříkazPoužij.KLICEK_VLOZEN) ||
            ( ! PříkazPoužij.KLIKA_VYROBENA ))
        {
            return "Trezor nejde otevřít." +
                   "\nZkontrolujte, zda je trezor správně nastaven.";
        }
        TREZOR_OTEVREN = true;
        return "Zatáhl(a) jste za vyrobenou kličku, čímž jste otevřel(a) Trezor." +
          "\n Vybral jste z trezoru sbírku odznaků. Jedná se o historické odznaky, které mají velkou cenu." +
          "\nÚspěšně jste dokončil(a) úkol. Hru ukončíte příkazem konec.";  
    }


//== SOUKROMÉ A POMOCNÉ METODY TŘÍDY ===========================================
//== SOUKROMÉ A POMOCNÉ METODY INSTANCÍ ========================================
//== VNOŘENÉ A VNITŘNÍ TŘÍDY ===================================================
//== TESTY A METODA MAIN =======================================================
//
//    /***************************************************************************
//     * Testovací metoda.
//     */
//    public static void test()
//    {
//        PrikazOtevři x = new PrikazOtevři();
//    }
//    /** @param args Parametry příkazového řádku - nepoužívané. */
//    public static void main( String[] args )  {  test();  }
}
